package com.nanhang.common;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class Result {
    // 状态码常量
    public static final String CODE_SUCCESS = "200";
    public static final String CODE_AUTH_ERROR = "401";
    public static final String CODE_SYS_ERROR = "500";

    // 返回字段
    private String code;  // 状态码
    private String msg;   // 消息
    private Object data;  // 返回的数据

    // 成功方法（无数据）
    public static Result success() {
        return Result.builder()
                .code(CODE_SUCCESS)
                .msg("成功")
                .data(null)
                .build();
    }

    // 成功方法（带数据）
    public static Result success(Object data) {
        return Result.builder()
                .code(CODE_SUCCESS)
                .msg("成功")
                .data(data)
                .build();
    }

    // 成功方法（自定义消息和数据）
    public static Result success(String msg, Object data) {
        return Result.builder()
                .code(CODE_SUCCESS)
                .msg(msg)
                .data(data)
                .build();
    }

    // 失败方法（默认系统错误）
    public static Result fail() {
        return Result.builder()
                .code(CODE_SYS_ERROR)
                .msg("系统错误")
                .data(null)
                .build();
    }

    // 失败方法（自定义消息）
    public static Result fail(String msg) {
        return Result.builder()
                .code(CODE_SYS_ERROR)
                .msg(msg)
                .data(null)
                .build();
    }

    // 失败方法（自定义状态码和消息）
    public static Result fail(String code, String msg) {
        return Result.builder()
                .code(code)
                .msg(msg)
                .data(null)
                .build();
    }

    // 认证失败方法
    public static Result authFail() {
        return Result.builder()
                .code(CODE_AUTH_ERROR)
                .msg("认证失败")
                .data(null)
                .build();
    }

    // 认证失败方法（自定义消息）
    public static Result authFail(String msg) {
        return Result.builder()
                .code(CODE_AUTH_ERROR)
                .msg(msg)
                .data(null)
                .build();
    }
}